var express = require('express');
var router = express.Router();
var sql = require('./../sql');
<<<<<<< HEAD
var uuid = require('node-uuid'); // 引入 以为的uuid
var Cart = require('./../sql/col/carts'); // 引入数据库操作模块
var Pro = require('./../sql/col/pros'); // 引入数据库操作模块

router.get('/', function(req,res,next){
  // 请求购物车数据库的数据
})

/**
 * @api {get}   api/cart/add 添加购物车
 * @apiDescription 添加商品至购物车
 * @apiGroup  Cart
 * @apiParam { string } userid 用户信息
 * @apiParam { string } proid 商品id
 * @apiParam { number } count 商品id
 * 
 * @apiSuccessExample { json } Success-Response:
 * {
 * code:10101, 
 * message:"请先登录"，
 * data:[]
 * }
 * {
 * code:200,
 * message:"加入购物车成功"",
 * }
 * @apiSampleRequest /api/cart/add
 * @apiVersion 0.0.0
*/
router.get('/add', function(req,res,next){
  // 加入购物车数据库的请求
  // 加入购物车的逻辑是判断用户是否传用户信息和商品信息进来。如果有传就通过商品信息先去购物车数据库
  //查询该商品是否已存在，如存在则把此次的数量加到元商品上，未存在就把这次商品加到购物车数据库去
  let { userid, proid, count } = req.query
  // 使数量变为数字型，如果用户未点击数量，就默认加进一件
  count = count *= 1 || 1
  最好后端液先判断下用户userid是否存在
  if (!userid || !proid) {
    // 不存在的
    res.send({
      code: 10101,
      message: '请先登录'
    })
    return
  }
  sql.find(Cart, { proid }, { _id: 0 }).then(data => {
    if (data.length > 0) { // 查询到该商品,该商品购物车数据库中有
      // { $inc: { num: num } } 将数据库中的num字段自增num
        // { $set: { num: 10 }} // 设置num值为10
      sql.update(Cart, { userid, proid }, { $inc: {count: count}}).then(() => {
        res.send({
          code: '200',
          message: '加入购物车成功'
        })
      })
    } else {
      // 数据不存在
      sql.find(Pro, { proid }, { _id: 0 }).then(data => {
        const { brand, proname, proimg, price} = data[0]
=======
var Cart = require('./../sql/col/carts');
var Pro = require('./../sql/col/pros');
var uuid = require('node-uuid');

/**
 * @api {get} api/cart 获取购物车数据
 * @apiDescription 获取购物车数据
 * @apiGroup cart
 * @apiParam { string } userid 用户ID
 * @apiSuccessExample { json } Success-Response:
 * res.send({
 *   code: '20202',
 *   message: '你想看谁的数据呢'
 * })
 * {
 *  code: '200',
 *  message: '获取购物车数据',
 *  len: 1, // 根据这个字段判断有没有数据
 *  data: data
 * }
 * @apiSampleRequest /api/cart
 * @apiVersion 1.0.0
 */
router.get('/', function(req, res, next) {
  // 1.获取用户id,依据用户id查询相关的购物车数据
  const { userid } = req.query;
  // ********验证用户有没有传递数据**********
  if (!userid) {
    res.send({
      code: '20202',
      message: '你想看谁的数据呢'
    })
    return
  }

  sql.find(Cart, { userid }, { _id: 0 }).then(data => {
    // 如果有数据，返回数据
    res.send({
      code: '200',
      message: '获取购物车数据',
      len: data.length, // 根据这个字段判断有没有数据
      data: data
    })
  })
});
/**
 * @api {post} api/cart/add 加入购物车
 * @apiDescription 加入购物车
 * @apiGroup cart
 * @apiParam { string } userid 用户ID
 * @apiParam { string } proid 产品id
 * @apiParam { number } num 产品数量 （默认为1）
 * @apiSuccessExample { json } Success-Response:
 * res.send({
 *   code: '10101',
 *   message: '购物车数据填写不完整'
 * })
 * {
 *  code: '200',
 *  message: '加入购物车成功'
 * }
 * @apiSampleRequest /api/cart/add
 * @apiVersion 1.0.0
 */
router.post('/add', function(req, res, next) {
  // 1.获取前端提交的数据 (userid proid num) brand  proname proimg price flag
  let { userid, proid, num } = req.body
  num = num * 1 || 1

  //************校验用户是否传递了数据****************
  if (!userid || !proid) {
    res.send({
      code: '10101',
      message: '购物车数据填写不完整'
    })
    return
  }

  // 2.如果当前的用户，数据库中有该商品，那么你的数量直接加num即可，否则直接添加一条新的记录
  sql.find(Cart, { userid, proid }, { _id: 0 }).then(data1 => {
    // 2.1 判断有没有数据 -- 不管有没有数据，都需要更新为选中状态
    if (data1.length > 0) {
      // 有数据 ---  更新购物车数据, 必为选中
      // { $inc: { num: num } } 将数据库中的num字段自增num
      // { $set: { num: 10 }} // 设置num值为10
      // $set: { flag: 1 } } 必为选中
      sql.update(Cart, { userid, proid }, { $inc: { num: num }, $set: { flag: 1 } }).then(() => {
        res.send({
          code: '200',
          message: '加入购物车功能'
        })
      })
      console.log('111111111111111')
    } else {
      // 没有数据 --- 插入数据
      // 3.从前端获取到了 userid proid num
      // 3.1 先从数据库获取proid所对用的数据，提取购物车需要的字段，组合数据
      sql.find(Pro, { proid }, {_id: 0}).then(data2 => {
        const { brand, proname, proimg, price } = data2[0]
>>>>>>> 61d95511f5bb548966870409910cdf315f439697
        const insertObj = {
          cartid: 'cart_' + uuid.v1(),
          userid,
          proid,
<<<<<<< HEAD
          count,
=======
>>>>>>> 61d95511f5bb548966870409910cdf315f439697
          brand,
          proname,
          proimg,
          price,
<<<<<<< HEAD
          flag: 1 // 默认选中状态
        }
        // 插入数据
        sql.insert(Cart, insertObj).then(() => {
          res.send({
            code: '200',
            message: '加入购物车成功'
=======
          flag: 1, // 只要加入购物车 必为选中
          num
        }
        // 3.2 插入数据库
        sql.insert(Cart, insertObj).then(() => {
          res.send({
            code: '200',
            message: '加入购物车功能'
>>>>>>> 61d95511f5bb548966870409910cdf315f439697
          })
        })
      })
    }
  })
<<<<<<< HEAD
=======
});
/**
 * @api {get} api/cart/update 加减数量
 * @apiDescription 加减数量
 * @apiGroup cart
 * @apiParam { string } cartid 购物车id
 * @apiParam { number } num 产品数量
 * @apiSuccessExample { json } Success-Response:
 * {
 *  code: '200',
 *  message: '更新购物车数量成功'
 * }
 * @apiSampleRequest /api/cart/update
 * @apiVersion 1.0.0
 */
router.get('/update', (req, res, next) => {
  // 1.获取修改的参数 cartid num
  let { cartid, num } = req.query
  num = num * 1
  // 2.依据cartid修改数据库中的数量
  sql.update(Cart, { cartid }, { $set: { num }}).then(() => {
    res.send({
      code: '200',
      message: '更新购物车数量成功'
    })
  })
})
/**
 * @api {get} api/cart/delete 删除数据
 * @apiDescription 删除数据
 * @apiGroup cart
 * @apiParam { string } cartid 购物车id
 * @apiSuccessExample { json } Success-Response:
 * {
 *  code: '200',
 *  message: '数据删除成功'
 * }
 * @apiSampleRequest /api/cart/delete
 * @apiVersion 1.0.0
 */
router.get('/delete',(req, res, next) => {
  // 获取参数 cartid
  const { cartid } = req.query
  sql.delete(Cart, { cartid }).then(() => {
    res.send({
      code: '200',
      message: '数据删除成功'
    })
  })
>>>>>>> 61d95511f5bb548966870409910cdf315f439697
})
module.exports = router;
